# 这是一个权限类，和验证类不同的是验证类只需要判断是否登录，而权限类则需要验证当前用户有无修改的权限
from rest_framework import permissions

# 这是我自己写的一个权限验证类,继承BasePermission类，并重写has_object_permission方法
# 这个方法的作用是判断当前用户是否有权限修改某个对象，如果是超级用户则返回True，否则判断当前用户是否是对象所有者，
# 如果是则返回True，否则返回False
class IsOwnOrReadOnly(permissions.BasePermission):
    """
        只有对象的创建者（所有者）才能修改或删除；所有登录用户都可以查看。
    """
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.user == request.user
    



"""
在你现有的 IsOwnOrReadOnly 基础上扩展，
    增加对管理员（is_staff=True）和超级管理员（is_superuser=True）的权限判断。思路是：
所有已登录用户：允许查看（GET/HEAD/OPTIONS）；
超级管理员 / 管理员 / 创建者：允许修改和删除；
其他用户：禁止修改和删除。
"""
class IsOwnerOrAdmin(permissions.BasePermission):
    """
    允许对象的所有者、管理员、超级管理员修改或删除；所有登录用户都可查看。
    """
    def has_object_permission(self, request, view, obj):
        # 所有登录用户都可以查看
        if request.method in permissions.SAFE_METHODS:
            return True
        # 超级管理员或管理员有权操作
        if request.user.is_superuser or request.user.is_staff:# 此处需要根据实际的需求实现对象所有者判断
            return True
        # 对象的创建者有权操作
        return obj.user == request.user
